#ifndef SNAKEGAMEENTRYWIDGET_H
#define SNAKEGAMEENTRYWIDGET_H

#include <QWidget>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QPushButton>
#include <QLabel>
#include <QFrame>
#include <QSpacerItem>
#include <QPropertyAnimation>
#include <QGraphicsOpacityEffect>
#include <QTimer>
#include <QPixmap>

/**
 * @brief Snake游戏入口界面
 * 
 * 游戏登录成功后的第一个界面，包含：
 * - 左侧皮肤设置区域
 * - 中央蛇形象展示
 * - 右侧游戏模式选择
 */
class SnakeGameEntryWidget : public QWidget
{
    Q_OBJECT

public:
    explicit SnakeGameEntryWidget(QWidget *parent = nullptr);
    ~SnakeGameEntryWidget();

    /**
     * @brief 设置游戏会话信息
     * @param sessionToken 游戏会话令牌
     * @param serverHost 服务器主机
     * @param serverPort 服务器端口
     */
    void setGameSession(const QString &sessionToken, const QString &serverHost, int serverPort);

protected:
    void showEvent(QShowEvent *event) override;
    void resizeEvent(QResizeEvent *event) override;

private slots:
    /**
     * @brief 皮肤按钮点击槽函数
     */
    void onSkinButtonClicked();

    /**
     * @brief 单人模式按钮点击槽函数
     */
    void onSinglePlayerClicked();

    /**
     * @brief 多人模式按钮点击槽函数
     */
    void onMultiPlayerClicked();

    /**
     * @brief 房间模式按钮点击槽函数
     */
    void onRoomModeClicked();

    /**
     * @brief 蛇动画更新槽函数
     */
    void updateSnakeAnimation();

private:
    /**
     * @brief 初始化用户界面
     */
    void setupUI();

    /**
     * @brief 设置样式表
     */
    void setupStyleSheet();

    /**
     * @brief 创建左侧控制面板
     * @return 左侧面板widget
     */
    QWidget* createLeftPanel();

    /**
     * @brief 创建右侧游戏区域
     * @return 右侧区域widget
     */
    QWidget* createRightPanel();

    /**
     * @brief 创建蛇形象展示区域
     * @return 蛇展示widget
     */
    QWidget* createSnakeDisplay();



    /**
     * @brief 设置右侧上部容器内容
     * @param container 容器widget
     */
    void setupRightTopContainer(QWidget *container);

    /**
     * @brief 设置右侧中部容器内容（游戏模式选择）
     * @param container 容器widget
     */
    void setupRightMiddleContainer(QWidget *container);

    /**
     * @brief 设置右侧下部容器内容
     * @param container 容器widget
     */
    void setupRightBottomContainer(QWidget *container);

    /**
     * @brief 创建欢迎卡片
     */
    void createWelcomeCard();

    /**
     * @brief 创建内容区域
     */
    void createContentArea();

    /**
     * @brief 创建状态卡片
     */
    void createStatusCard();

    /**
     * @brief 应用现代化样式
     */
    void applyModernStyle();

    /**
     * @brief 创建游戏预览卡片
     * @param layout 父布局
     */
    void createGamePreviewCard(QHBoxLayout *layout);

    /**
     * @brief 创建游戏模式卡片
     * @param layout 父布局
     */
    void createGameModeCard(QHBoxLayout *layout);

    // 删除：未使用的createModernModeButton方法

    /**
     * @brief 创建游戏模式按钮
     * @param title 按钮标题
     * @param description 按钮描述
     * @param icon 按钮图标
     * @param color 主题颜色
     * @return 游戏模式按钮
     */
    QPushButton* createGameModeButton(const QString &title, const QString &description, 
                                     const QString &icon, const QString &color);

    /**
     * @brief 启动蛇动画
     */
    void startSnakeAnimation();

    /**
     * @brief 停止蛇动画
     */
    void stopSnakeAnimation();

    /**
     * @brief 加载蛇图片资源
     */
    void loadSnakeImages();

private:
    // === UI组件 ===
    QVBoxLayout *m_mainLayout;          ///< 主布局
    QWidget *m_leftPanel;               ///< 左侧面板
    QWidget *m_rightPanel;              ///< 右侧面板
    
    // 左侧组件
    QWidget *m_leftContainer;           ///< 左侧容器
    QWidget *m_leftSubContainer;        ///< 左侧子容器
    QPushButton *m_skinButton;          ///< 皮肤按钮
    QSpacerItem *m_leftSpacer;          ///< 左侧弹簧
    
    // 右侧组件
    QWidget *m_snakeDisplay;            ///< 蛇展示区域
    QWidget *m_gameModePanel;           ///< 游戏模式面板
    
    // 蛇形象组件
    QLabel *m_snakeHead;                ///< 蛇头
    QLabel *m_snakeBody1;               ///< 蛇身1
    QLabel *m_snakeBody2;               ///< 蛇身2
    QLabel *m_snakeBody3;               ///< 蛇身3
    QLabel *m_snakeTail;                ///< 蛇尾
    
    // 游戏模式按钮
    QPushButton *m_singlePlayerBtn;     ///< 单人模式按钮
    QPushButton *m_multiPlayerBtn;      ///< 多人模式按钮
    QPushButton *m_roomModeBtn;         ///< 房间模式按钮
    
    // === 动画和效果 ===
    QTimer *m_snakeAnimationTimer;      ///< 蛇动画定时器
    int m_animationStep;                ///< 动画步骤
    
    // === 图片资源 ===
    QPixmap m_snakeHeadPixmap;          ///< 蛇头图片
    QPixmap m_snakeBodyPixmap;          ///< 蛇身图片
    QPixmap m_snakeTailPixmap;          ///< 蛇尾图片
    
    // === 游戏会话信息 ===
    QString m_sessionToken;             ///< 游戏会话令牌
    QString m_serverHost;               ///< 服务器主机
    int m_serverPort;                   ///< 服务器端口

signals:
    /**
     * @brief 游戏模式选择信号
     * @param mode 游戏模式 ("single", "multi", "room")
     */
    void gameModeSelected(const QString &mode);

    /**
     * @brief 皮肤设置信号
     */
    void skinSettingsRequested();

    /**
     * @brief 返回主菜单信号
     */
    void backToMainMenu();
};

#endif // SNAKEGAMEENTRYWIDGET_H
